const app = getApp()
// 导入API工具
import { orderAPI } from '../../utils/api';

Page({
  data: {
    goodsInfo: null,
    quantity: 1,
    totalPrice: 0,
    addressInfo: null, // 收货地址信息
    loading: false, // 加载状态
    submitting: false, // 提交订单状态
    orderId: '', // 订单ID（从订单列表页跳转时使用）
    fromOrderList: false, // 是否从订单列表页跳转而来
    showPayment: false, // 是否显示支付界面
    paymentOrderData: null, // 用于支付的订单数据
    selectedPayment: 'wechat', // 默认选择微信支付
    paymentLoading: false, // 支付处理中状态
    orderStatus: 'pending', // 默认订单状态为待支付
    // 订单列表相关状态
    showOrderList: false, // 是否显示订单列表
    orders: [], // 订单列表数据
    page: 1, // 当前页码
    pageSize: 10, // 每页订单数量
    hasMoreOrders: true // 是否有更多订单
  },

  onLoad: function(options) {
    console.log('订单详情页加载，接收到的参数:', options);
    
    // 检查是否从订单列表页跳转过来
    this.setData({
      fromOrderList: options.fromOrderList === 'true',
      orderId: options.orderId || ''
    });
    
    // 检查是否需要显示订单列表
    if (options.showOrderList === 'true') {
      this.setData({ showOrderList: true });
      this.loadOrders(true); // 加载订单列表
    } else if (options.goodsInfo) {
      // 从商品详情页接收商品信息
      try {
        const goodsInfo = JSON.parse(options.goodsInfo);
        const totalPrice = goodsInfo.price * this.data.quantity;
        
        this.setData({
          goodsInfo: goodsInfo,
          totalPrice: totalPrice
        });
      } catch (e) {
        console.error('解析商品信息失败:', e);
        this.handleParseError();
      }
    } else if (this.data.fromOrderList && this.data.orderId) {
      // 如果是从订单列表页跳转过来且有订单ID，从API获取订单详情
      this.loadOrderDetail();
    } else {
      // 如果没有有效的参数，使用默认数据
      this.handleParseError();
    }
  },
  
  // 加载订单列表
  loadOrders: function(refresh = false) {
    // 检查登录状态
    const app = getApp();
    const token = app.globalData.token || '';
    
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    
    // 如果是刷新，则重置页码和数据
    if (refresh) {
      this.setData({
        page: 1,
        orders: [],
        hasMoreOrders: true
      });
    }
    
    // 如果没有更多订单，则不再请求
    if (!this.data.hasMoreOrders || this.data.loading) {
      wx.stopPullDownRefresh();
      return;
    }
    
    this.setData({ loading: true });
    
    orderAPI.getUserOrders(this.data.page, this.data.pageSize)
      .then(res => {
        console.log('获取订单列表成功:', res);
        
        if (res.success && res.data && res.data.orders) {
          const newOrders = res.data.orders;
          const orders = refresh ? newOrders : [...this.data.orders, ...newOrders];
          
          // 检查是否还有更多数据
          const hasMoreOrders = newOrders.length === this.data.pageSize;
          
          this.setData({
            orders: orders,
            hasMoreOrders: hasMoreOrders,
            page: this.data.page + 1
          });
        } else {
          wx.showToast({
            title: res.message || '获取订单列表失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        console.error('获取订单列表失败:', err);
        wx.showToast({
          title: '获取订单列表失败，请稍后重试',
          icon: 'none'
        });
      })
      .finally(() => {
        this.setData({ loading: false });
        wx.stopPullDownRefresh();
      });
  },
  
  // 切换到订单列表视图
  switchToListView: function() {
    this.setData({ showOrderList: true });
    this.loadOrders(true);
  },
  
  // 切换到订单详情视图
  switchToDetailView: function() {
    this.setData({ showOrderList: false });
  },
  
  // 查看订单详情
  viewOrderDetail: function(e) {
    const orderId = e.currentTarget.dataset.id;
    this.setData({
      orderId: orderId,
      showOrderList: false
    });
    this.loadOrderDetail();
  },
  
  // 处理参数解析错误
  handleParseError: function() {
    // 使用默认的测试数据
    const defaultGoods = {
      id: 1,
      title: '琴牌展示1',
      price: 899,
      image: '/pages/tabBar/home.png',
      selectedService: '标准服务',
      details: '这是商品的详细介绍内容...'
    };
    
    this.setData({
      goodsInfo: defaultGoods,
      totalPrice: defaultGoods.price * this.data.quantity
    });
  },
  
  // 加载订单详情
  loadOrderDetail: function() {
    if (!this.data.orderId) return;
    
    this.setData({ loading: true });
    
    orderAPI.getOrderDetail(this.data.orderId)
      .then(res => {
        if (res.success && res.data) {
          this.setData({
            goodsInfo: res.data.goodsInfo,
            quantity: res.data.quantity,
            totalPrice: res.data.totalPrice,
            addressInfo: res.data.addressInfo,
            orderStatus: res.data.status || 'pending', // 保存订单状态
            loading: false
          });
        } else {
          wx.showToast({
            title: res.message || '获取订单详情失败',
            icon: 'none'
          });
          this.setData({ loading: false });
        }
      })
      .catch(err => {
        console.error('获取订单详情失败:', err);
        wx.showToast({
          title: '网络错误，请稍后重试',
          icon: 'none'
        });
        this.setData({ loading: false });
      });
  },
  
  // 申请退款
  requestRefund: function() {
    wx.showModal({
      title: '申请退款',
      content: '确定要申请退款并删除该订单吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
          });
          
          // 调用删除订单API，从数据库中删除订单
          orderAPI.deleteOrder(this.data.orderId)
            .then(res => {
              wx.hideLoading();
              
              if (res.success) {
                wx.showToast({
                  title: '退款申请已提交，订单已从数据库删除',
                  icon: 'success'
                });
                
                // 同时从本地orders数组中移除当前订单
                const updatedOrders = this.data.orders.filter(order => order.id !== this.data.orderId);
                this.setData({
                  orders: updatedOrders,
                  orderStatus: 'refunding'
                });
              } else {
                wx.showToast({
                  title: res.message || '删除订单失败',
                  icon: 'none'
                });
              }
              
              // 1.5秒后返回上一页
              setTimeout(() => {
                wx.navigateBack();
              }, 1500);
            })
            .catch(err => {
              wx.hideLoading();
              console.error('删除订单失败:', err);
              wx.showToast({
                title: '网络错误，删除订单失败',
                icon: 'none'
              });
            });
        }
      }
    });
  },
  
  // 取消订单
  cancelOrder: function() {
    wx.showModal({
      title: '取消订单',
      content: '确定要取消该订单并从数据库删除吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
          });
          
          // 调用删除订单API，从数据库中删除订单
          orderAPI.deleteOrder(this.data.orderId)
            .then(res => {
              wx.hideLoading();
              
              if (res.success) {
                wx.showToast({
                  title: '订单已取消并从数据库删除',
                  icon: 'success'
                });
                
                // 同时从本地orders数组中移除当前订单
                const updatedOrders = this.data.orders.filter(order => order.id !== this.data.orderId);
                this.setData({
                  orders: updatedOrders,
                  orderStatus: 'cancelled'
                });
              } else {
                wx.showToast({
                  title: res.message || '删除订单失败',
                  icon: 'none'
                });
              }
              
              // 1.5秒后返回上一页
              setTimeout(() => {
                wx.navigateBack();
              }, 1500);
            })
            .catch(err => {
              wx.hideLoading();
              console.error('删除订单失败:', err);
              wx.showToast({
                title: '网络错误，删除订单失败',
                icon: 'none'
              });
            });
        }
      }
    });
  },

  // 增加商品数量
  increaseQuantity: function() {
    const newQuantity = this.data.quantity + 1;
    const totalPrice = this.data.goodsInfo.price * newQuantity;
    
    this.setData({
      quantity: newQuantity,
      totalPrice: totalPrice
    });
  },

  // 减少商品数量
  decreaseQuantity: function() {
    if (this.data.quantity > 1) {
      const newQuantity = this.data.quantity - 1;
      const totalPrice = this.data.goodsInfo.price * newQuantity;
      
      this.setData({
        quantity: newQuantity,
        totalPrice: totalPrice
      });
    }
  },

  // 提交订单
  submitOrder: function() {
    // 从data中获取订单所需数据
    const { goodsInfo, quantity, totalPrice, addressInfo, fromOrderList, orderId } = this.data;
    
    // 防御性编程，确保所有字段都有值
    const safeGoodsInfo = goodsInfo || {};
    const safeQuantity = quantity || 1;
    const safeTotalPrice = totalPrice || 0;
    
    // 构建订单数据 - 严格按照后端控制器要求的格式
    const orderData = {
      goods_id: safeGoodsInfo.id ? parseInt(safeGoodsInfo.id) : 0, // 确保goods_id是整数格式，防止undefined
      goods_info: safeGoodsInfo,                                   // 完整的商品信息对象
      quantity: parseInt(safeQuantity),                            // 确保quantity是整数格式
      total_price: safeTotalPrice                                  // 保留total_price字段
    };
    
    // 如果是从订单列表页跳转过来的订单，直接显示支付界面
    if (fromOrderList && orderId) {
      // 设置支付相关数据并显示支付界面
      this.setData({
        showPayment: true,
        paymentOrderData: { ...orderData, orderId: orderId },
        submitting: false
      });
      return;
    }
    
    // 打印订单数据到控制台，便于调试
    console.log('订单提交，订单数据:', orderData);
    
    // 检查登录状态
    const app = getApp();
    const token = app.globalData.token || '';
    
    // 如果没有token，跳转到登录页面
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      
      // 跳转到登录页面，并传递来源页面信息
      setTimeout(() => {
        wx.navigateTo({
          url: '/pages/login/login?redirect=' + encodeURIComponent('/pages/order/order')
        });
      }, 1000);
      return;
    }
    
    // 设置提交状态为true
    this.setData({ submitting: true });
    
    // 普通订单提交逻辑（从商品详情页过来的），调用创建订单API上传数据到服务器
    orderAPI.createOrder(orderData)
      .then(res => {
        console.log('订单创建API返回结果:', res); // 打印API返回结果，便于调试
        
        if (res.success && res.data) {
          // 创建订单成功后，记录订单ID
          const createdOrderId = res.data.id || res.data.orderId; // 兼容可能的不同字段名
          orderData.orderId = createdOrderId;
          
          // 打印创建成功的订单数据到控制台，显示已保存到数据库的状态
          console.log('订单数据已成功上传到数据库，订单ID:', createdOrderId, '，订单数据:', orderData);
          
          // 显示成功提示
          wx.showToast({
            title: '订单创建成功',
            icon: 'success'
          });
          
          // 设置支付相关数据并显示支付界面
          this.setData({
            showPayment: true,
            paymentOrderData: orderData,
            submitting: false
          });
        } else {
          // 订单创建失败的错误处理
          const errorMsg = res.message || '创建订单失败，请检查订单信息';
          console.error('订单创建失败:', errorMsg);
          wx.showToast({
            title: errorMsg,
            icon: 'none'
          });
          this.setData({ submitting: false });
        }
      })
      .catch(err => {
        // 捕获网络或服务器错误
        console.error('订单数据上传失败，网络或服务器错误:', err);
        wx.showToast({
          title: '网络错误，请检查网络连接后重试',
          icon: 'none'
        });
        this.setData({ submitting: false });
      });
  },
  
  // 支付订单
  payOrder: function(orderData) {
    wx.showLoading({
      title: '处理支付中...',
    });
    
    // 调用支付API
    orderAPI.payOrder(orderData.orderId || '')
      .then(res => {
        wx.hideLoading();
        
        // 不管支付结果如何，都显示支付成功提示
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });
        
        // 注释：根据需求，不管支付成功失败，都跳转到支付成功页面
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/payment-success/payment-success?orderId=' + orderData.orderId + '&amount=' + orderData.total_price
          });
        }, 1500);
      })
      .catch(err => {
        wx.hideLoading();
        console.error('支付失败:', err);
        
        // 注释：根据需求，不管支付成功失败，都显示支付成功提示
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });
        
        // 注释：根据需求，不管支付成功失败，都跳转到支付成功页面
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/payment-success/payment-success?orderId=' + orderData.orderId + '&amount=' + orderData.total_price
          });
        }, 1500);
      })
      .finally(() => {
        this.setData({ submitting: false });
      });
  },
  
  // 选择支付方式
  selectPayment: function(e) {
    const method = e.currentTarget.dataset.method;
    this.setData({
      selectedPayment: method
    });
  },
  
  // 确认支付
  confirmPayment: function() {
    if (!this.data.paymentOrderData || !this.data.paymentOrderData.orderId) {
      wx.showToast({
        title: '订单信息错误',
        icon: 'none'
      });
      return;
    }
    
    this.setData({
      paymentLoading: true
    });
    
    // 更新支付方式
    const orderData = {
      ...this.data.paymentOrderData,
      paymentMethod: this.data.selectedPayment
    };
    
    // 调用支付API
    orderAPI.payOrder(orderData.orderId, orderData.paymentMethod)
      .then(res => {
        this.setData({
          paymentLoading: false
        });
        
        // 不管支付结果如何，都显示支付成功提示
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });
        
        // 注释：根据需求，不管支付成功失败，都跳转到支付成功页面
        setTimeout(() => {
          this.setData({ showPayment: false });
          wx.navigateTo({
            url: '/pages/payment-success/payment-success?orderId=' + orderData.orderId + '&amount=' + orderData.total_price
          });
        }, 1500);
      })
      .catch(err => {
        this.setData({
          paymentLoading: false
        });
        console.error('支付失败:', err);
        
        // 注释：根据需求，不管支付成功失败，都显示支付成功提示
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });
        
        // 注释：根据需求，不管支付成功失败，都跳转到支付成功页面
        setTimeout(() => {
          this.setData({ showPayment: false });
          wx.navigateTo({
            url: '/pages/payment-success/payment-success?orderId=' + orderData.orderId + '&amount=' + orderData.total_price
          });
        }, 1500);
      });
  },
  
  // 关闭支付界面
  closePayment: function() {
    this.setData({
      showPayment: false,
      paymentOrderData: null
    });
  },
  
  // 点击收货地址 - 抖音小程序集成
  onAddressTap: function() {
    // 首先检查是否有地址权限
    tt.getSetting({
      success: (res) => {
        console.log('获取权限设置:', res);
        
        // 如果已经授权，直接调用地址选择接口
        if (res.authSetting && res.authSetting['scope.address']) {
          this.chooseAddress();
        } else {
          // 如果没有授权，先请求授权
          tt.authorize({
            scope: 'scope.address',
            success: () => {
              // 授权成功后调用地址选择接口
              this.chooseAddress();
            },
            fail: (err) => {
              console.log('请求地址权限失败:', err);
              
              // 如果是用户拒绝授权，引导用户去设置页面
              if (err.errMsg.includes('auth deny')) {
                wx.showModal({
                  title: '需要权限',
                  content: '需要您授权获取收货地址才能完成订单，是否前往设置页面开启权限？',
                  success: (modalRes) => {
                    if (modalRes.confirm) {
                      tt.openSetting();
                    }
                  }
                });
              } else if (err.errMsg.includes('scope is not declared in the privacy agreement')) {
                // 隐私权限未在app.json中声明
                wx.showToast({
                  title: '隐私权限未正确配置',
                  icon: 'none'
                });
              } else {
                wx.showToast({
                  title: '请求权限失败，请稍后重试',
                  icon: 'none'
                });
              }
            }
          });
        }
      },
      fail: (err) => {
        console.error('获取设置信息失败:', err);
        wx.showToast({
          title: '获取设置失败，请稍后重试',
          icon: 'none'
        });
      }
    });
  },
  
  // 选择收货地址的核心方法
  chooseAddress: function() {
    tt.chooseAddress({
      success: res => {
        this.setData({
          addressInfo: res
        })
        console.log('选择收货地址成功:', res);
      },
      
      fail: res => {
        console.log('选择收货地址失败:', res.errMsg);
        
        if (res.errMsg.includes('cancel')) {
          // 用户取消选择，不需要特殊处理
          console.log('用户取消选择收货地址');
        } else {
          wx.showToast({
            title: '选择地址失败，请稍后重试',
            icon: 'none'
          });
        }
      }
    });
  },
  
  // 下拉刷新处理
  onPullDownRefresh: function() {
    console.log('订单页面下拉刷新');
    if (this.data.showOrderList) {
      this.loadOrders(true);
    } else {
      wx.stopPullDownRefresh();
    }
  },
  
  // 上拉触底加载更多
  onReachBottom: function() {
    console.log('订单页面上拉触底');
    if (this.data.showOrderList) {
      this.loadOrders();
    }
  }
});